import java.util.ArrayList;
import java.util.List;

/**
 * 1716. 计算力扣银行的钱
 * https://leetcode-cn.com/problems/calculate-money-in-leetcode-bank/
 */
public class Solutions_1716 {
    public static void main(String[] args) {
        int n1 = 4;  // output: 10
        int n2 = 10;  // output: 37
        int n3 = 20;  // output: 96

        List<Integer> inputs = new ArrayList<>();
        inputs.add(n1);
        inputs.add(n2);
        inputs.add(n3);

        for (int input : inputs) {
            int result = totalMoney(input);
            System.out.println(result);
        }
    }

    /**
     * 暴力法
     */
    public static int totalMoney2(int n) {
        int res = 0;
        // j 记录当前是第几周（第 5 周，则每天要多加 5）
        int j = 0;
        for (int i = 1; i <= n; i++) {
            if (i % 7 == 0) {
                res += 7 + j;
                j ++;
            } else {
                res += (i % 7) + j;
            }
        }
        return res;
    }

    /**
     * 数学法
     */
    public static int totalMoney(int n) {
        int remindDay = n % 7;
        int weekDay = n / 7;
        int res = 0;
        for (int i = 0; i < weekDay; i++) {
            // 每 1 周，比前 1 周多 7
            res += 28 + (i * 7);
        }
        for (int i = 1; i <= remindDay; i++) {
            res += i + weekDay;
        }
        return res;
    }
}
